Spring Security 实战干货:OAuth2授权回调的处理机制
1. 前言
上一文着重讲了当用户发起第三方授权请求是如何初始化OAuth2AuthorizationRequest
授权请求对象以及如何通过过滤器进行转发到第三方的。今天我们接着这个流程往下走,来看看服务器收到授权请求是怎么做的。
2. OAuth2 登录认证
当第三方收到 OAuth2 授权请求后,会将授权的回执通过我方提供的回调请求redirect_uri
传递给我们。由于默认情况下回调的路径满足/login/oauth2/code/*
,所以我们只要找到拦截回调的过滤器就可以知道 Spring Security 是如何处理回调了。通过搜索确认了OAuth2LoginAuthenticationFilter
就是处理回调的过滤器。
OAuth2LoginAuthenticationFilter
第三方认证服务器在调用redirect_uri
时附加code
和state
参数,在被这个Filter
拦截后,创建一个待认证凭据OAuth2LoginAuthenticationToken
,并委托给了AuthenticationManager
进行身份验证。
一旦成功验证,则生成认证凭据OAuth2AuthenticationToken
和认证客户端对象OAuth2AuthorizedClient
。最后, OAuth2AuthenticationToken
返回,并最终存储在SecurityContextRepository
完成认证处理;而OAuth2AuthorizedClient
被保存到OAuth2AuthorizedClientRepository
。流程图如下:
这个过滤器和
UsernamePasswordAuthenticationFilter
一样继承了AbstractAuthenticationProcessingFilter
,流程有相像的地方。
3. 总结
当第三方授权后会通过回调来通知客户端,而客户端收到回调通知后会对授权结果进行认证操作才能表明这一套流程是合规的。而这个流程是由过滤器OAuth2LoginAuthenticationFilter
来控制的。今天对其流程进行了图解,其中的认证过程还是一个未解之谜,锁定:码农小胖哥 ,这个答案会在系列的下一篇为你揭晓。
2020-11-10
2020-11-07
2020-11-06